spring如何使一个项目完美兼容多种数据库?

您所在的位置:网站首页 springboot 插件方案 spring如何使一个项目完美兼容多种数据库?

spring如何使一个项目完美兼容多种数据库?

2023-12-10 02:35| 来源: 网络整理| 查看: 265

我们都知道有tk.mapper和mybayis-plus这两个插件,当然还有别的,就是可以自适应数据库来改变xml语法来和数据库打交道。但是这些插件处理不了一些数据库中独有的语法与复杂的sql,这样就会有问题,搞程序的我们都知道一个道理,不能完美解决那就是没解决。

如何解决?

1.我们都知道springboot有两个yml文件是可以放在jar包外边的,jar启动时会优先扫描同级目录有没有这两个yml文件,如果有就以外面的为准。

2.我们就通过这两个文件来解决,首先在application.yml中定义一个变量如databasetype:oracle也就是数据库类型,当然如果要用oracle这里的mysql就改为oracle,这里的databasetype与代码中绑定,不可更改,如果要换就改代码(代码中判断时获取了这个函数)。

 3.然后我们在application-druid中配置数据库的基本连接信息,主要是数据库名字、用户名和密码,这里如果是oracle就配置oracle的。

 4.在业务执行的server层判断,首先我们要定义一个变量,并拿到yml中写好的值。当然其他地方判断也可以,只要能给参数附一个数据库类型的标识值就可以。拿到值以后传到接口参数中,我这里是以实体类作为参数,所以我在实体类定义了一个值,用于接收判断这个值。如果是别的类型例如String、object、int这种作为参数那更简单,直接给参数赋值就可以。我这里以修改用户信息这个接口作为例子。

5.在xml中判断,如果类型是不同的数据库那么sql的写法就不同,我这里只是简单的改变了一下值。举几个例子,现在很流行的全球唯一标识:mysql里面叫uuid,oracle里面叫guid,两个id生成的方法都不一样mysql是通过select uuid()生成,而oracle是通过sys_guid()生成,都是数据库独有的特性,所以我们要想解决这种一个项目适用于不同的数据库时就需要这样的判断,例如我们把这个用户的名字改为这个唯一标识的id。

我们判断如果是mysql那么右边 user_name = select uuid()

我们判断如果是oracle那么右边 user_name = sys_guid()

不要小看这小小的差别,这只是我举例子中的一个而已,还有像oracle的nvl、当前日期的生成、以及日期的查询以及各种数据库中对关键字的处理 有的是用`有的用‘’有的用“”,区别还是挺大的,还有for循环的写法等等很多。

至此即可解决我们的问题啦,只要xml中代码写好了,要更换数据库只需要改外边的两个yml文件就可以了。改个连接配置,改个数据库类型标识。是不是很简单啊!

 小伙伴们不要觉得这样做麻烦,比让你重新复制一份项目让你去直接改成不同数据库,可是要简单的多。而且后期有问题还要维护多个版本。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3